#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>

#include "sessionfriendarea.h"
#include "messageshowarea.h"
#include "messageeditarea.h"
// #include "selfinfowidget.h"
// #include "sessiondetailwidget.h"
// #include "groupsessiondetailwidget.h"
// #include "addfrienddialog.h"
#include "model/data.h"

QT_BEGIN_NAMESPACE
namespace Ui {

using model::UserInfo;
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    static MainWidget* getInstance();
    ~MainWidget();

private:
    static MainWidget* instance;
    // 对于单例模式来说, 最关键的部分, 不是 "创建实例" , 而是限制别人创建实例.
    MainWidget(QWidget *parent = nullptr);

private:
    Ui::MainWidget *ui;

    QWidget* windowleft;        // 窗口最左部分
    QWidget* windowmid;         // 窗口中间部分
    QWidget* windowright;       // 窗口最右部分

    //窗口左部分
    enum ActiveTab
    {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };

    ActiveTab activeTab = SESSION_LIST;

    QPushButton* userAvatar;        // 用户头像
    QPushButton* sessionTabBtn;     // 会话标签页按钮
    QPushButton* friendTabBtn;      // 好友标签页按钮
    QPushButton* applyTabBtn;       // 好友申请标签页按钮

    // 列表部分
    QLineEdit* searchEdit;          // 搜索框
    QPushButton* addFriend;         // 添加好友按钮
    sessionFriendArea* sessionFriendarea;   // 聊天信息区

    // 聊天部分
    QLabel* sessionTitleLabel;      // 显示会话标题
    QPushButton* extraBtn;          // 显示会话详情按钮
    MessageShowArea* msgShowArea;   // 消息展示区
    MessageEditArea* msgEditArea;   // 消息编辑区


public:
    // 初始化主窗口的样式布局
    void initMainWindow();
    // 初始化左侧窗口布局
    void initLeftWindow();
    // 初始化中间窗口布局
    void initMidWindow();
    // 初始化右侧窗口布局
    void initRightWindow();

    //初始化信号槽
    void initSignalSlot();

    //菜单会话槽
    void switchTabToSession();
    //菜单好友槽
    void switchTabToFriend();
    //菜单添加槽
    void switchTabToApply();

    //会话列表对应
    void loadSessionList();
    //好友列表对应
    void loadFriendList();
    //加好友列表对应
    void loadApplyList();

};

#endif // MAINWIDGET_H
